package do

import (
	"fmt"
	"strings"
	"time"

	"gorm.io/gorm"
)

const (
	CategoryTobeDone = -1 // 导入后待分类
)

// 商品
type Goods struct {
	ID int `gorm:"primarykey"`

	// 13位条码
	BarCode string `gorm:"column:bar_code;type:char(15);NOT NULL;unique"`
	// 名称(如: 舒客防蛀固齿牙膏120克)
	Name string `gorm:"column:name;NOT NULL;unique"`

	// 厂价
	FactoryPrice Money `gorm:"column:factory_price;NOT NULL"`

	// 关联的"三级分类": 分类,分线,品牌
	CategoryID int `gorm:"column:category_id;NOT NULL;index"`
	// 箱规(通俗来说, 就是一件`多少`个)
	BoxRule int `gorm:"column:box_rule;NOT NULL"`

	CreatedAt time.Time `gorm:"autoCreateTime;type:datetime(0)"`
	UpdatedAt time.Time `gorm:"autoUpdateTime;type:datetime(0)"`
}

func (s *Goods) BeforeSave(tx *gorm.DB) (err error) {
	if len(s.BarCode) != 13 {
		return fmt.Errorf("商品条码必须是13位")
	}
	if s.Name == "" {
		return fmt.Errorf("商品名称不能为空")
	}
	if s.CategoryID == 0 {
		return fmt.Errorf("分类id非法:%v", s.CategoryID)
	}
	if s.BoxRule <= 0 {
		return fmt.Errorf("箱规非法")
	}

	return nil
}

func (Goods) TableName() string {
	return "goods"
}

func CheckGoodsBarCode(barCodes string) error {
	if len(strings.TrimSpace(barCodes)) != 13 {
		return fmt.Errorf("商品条码必须是13位")
	}
	return nil
}
